package com.ddxz.tool.core.common;

import com.ddxz.tool.core.convert.CollectionUtil;

import java.util.ArrayList;
import java.util.List;

import static com.ddxz.tool.core.common.DdxzTree.NONE_SELECTED;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/31
 */

public interface DdxzTreeUtil {
    /**
     * 获取树形结构中指定标识的元素
     * @param tree 树形结构的根节点（森林）
     * @param id 要查找的节点标识
     * @return id所标识的节点
     */
    default DdxzTree findItem(List<DdxzTree> tree, String id) {
        DdxzTree result = null;

        for(DdxzTree item : tree) {
            if(item.getId().equals(id)) {
                return item;
            }

            if(!CollectionUtil.isEmpty(item.getChildren())) {
                result = findItem(item.getChildren(), id);
            }

            if(result != null) {
                return result;
            }
        }

        return null;
    }

    /**
     * 对树形结构的节点名称按照关键字进行过滤
     * @param tree 树形结构
     * @param keyword 关键字
     * @return 过滤后的树形结构
     */
    default List<DdxzTree> treeFilter(List<DdxzTree> tree, String keyword) {
        if(CollectionUtil.isEmpty(tree)) {
            return new ArrayList<>(0);
        }

        List<DdxzTree> nodeIdx = new ArrayList<>();
        boolean flag;
        for(DdxzTree item : tree) {
            flag = false;
            if(!CollectionUtil.isEmpty(item.getChildren())) {
                treeFilter(item.getChildren(), keyword);
            }

            if(!CollectionUtil.isEmpty(item.getChildren())) {
                flag = true;
            } else if(item.getName().contains(keyword)) {
                flag = true;
            }

            if(!flag) {
                nodeIdx.add(item);
            }
        }

        nodeIdx.forEach(item -> tree.remove(item));

        return tree;
    }
}
